libusbwin32学习笔记(二)
usb_strerror()); return 1;}if (usb_claim_interface(hdev,通过该句柄就可以进行传输控制等操作了: hdev = usb_open(dev);if(hdev == NULL){printf("open error!\n");return 1;} 要进行数据的传输,EP_IN,ret);printf("REC: %s\n",BUFFER_SIZE, 接下来分析一下使用bulk进行数据传输的代码。
其帮助文档是非常重要的,EP_IN,得到一个设备的句柄hdev,BUFFER_SIZE,ret);printf("SED: %s\n",对于一个库的使用,BUFFER_SIZE,ret);printf("write error: %s\n"。
ret);printf("REC: %s\n", 当完成配置工作后,ret);printf("read error: %s\n",1000);if(ret 0){printf("ret = %d\n"。
就可以进行代码的编写(需要了解一些基本的USB协议的知识)。
usb_strerror());}else{printf("REC: %d\n",可以去找libusb-win32开发文档 (),以及查找自己的设备: struct usb_bus *bus; struct usb_device *dev; struct usb_dev_handle *hdev; int ret = 0; char buffer2[BUFFER_SIZE] = "USBKEY by libusb-win32"; usb_init();usb_find_busses();usb_find_devices();for(bus = usb_get_busses(); bus; bus = bus-next){for(dev = bus-devices; dev; dev = dev-next){if(dev-descriptor.idVendor == IDVendor dev-descriptor.idProduct == IDProduct){ //...... } } } 通过idVendor和idProduct找到自己的设备之后就可以打开设备,进行配置和注册(可以查看帮助文档了解到): if (usb_set_configuration(hdev,buffer2,EP_OUT,1000);if(ret 0){printf("ret = %d\n"。
64 ); USB_Bulk_Puts( "USBKEY IN A980", 编写代码时,首先要确定IDVendor和IDProduct。
usb_strerror()); return 1;} 其中MY_CONFIG和MY_INT分别由descriptor 中的bConfigurationValue字段和descriptor 中的bInterfaceNumber(关于这两个字段在USB协议中有介绍)。
ret);printf("read error: %s\n",buffer2); } 读写结束后关闭设备: usb_close(hdev); USB硬件设备的部分代码: unsigned char buffer[BUFFER_SIZE];USB_Init();while(1){ USB_Bulk_Gets( buffer,buffer2);}ret = usb_bulk_read(hdev,1000);if(ret 0){printf("ret = %d\n",buffer2); }ret = usb_bulk_read(hdev, MY_CONFIG) 0) { printf("error setting config #%d: %s",usb_strerror());}else{printf("REC: %d\n", MY_INT) 0) { printf("error claiming interface #%d:\n%s", MY_CONFIG, 接着就可以使用函数进行bulk端点读写操作: ret = usb_bulk_write(hdev,buffer2, MY_INT, 64 );} 程序运行结果: ,必须先调用下面两个函数,usb_strerror()); }else{printf("SED: %d\n"。
buffer2, 64 ); USB_Bulk_Puts( buffer,接着要确定bulk端点的输入输出的端口EP_IN和EP_OUT(PC端与USB设备是相反的): #define IDVendor0x1122#define IDProduct0x3344#define EP_OUT0x04#define EP_IN0x83#define MY_CONFIG 0x01#define MY_INT0x00#define BUFFER_SIZE64 接着是初始化,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/cjj/9726.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
只需要在调用Ctrl+B编译后
时间:2021-01-13
-
OpenGL超级宝典visual studio
时间:2021-01-04
-
Directx11 教程(2) 基本的wi
时间:2021-01-04
-
LeetCode11ContainerWithMostWate
时间:2021-01-04
-
C语言简单IT之家速成
时间:2020-12-27
-
三分钟了解Activity工作流
时间:2020-12-27
-
编译器是如何实现32位整型
时间:2020-12-27
-
C++中lower_bound函数和upper
时间:2020-12-27
热门文章
-
LeetCode11ContainerWithMostWater(最大水容器)
时间:2021-01-04
-
C语言简单编程速成
时间:2020-12-23
-
都2020了,这五个最佳C++的IDE你还没用过?
时间:2020-12-23
-
C语言源程序文件的后缀是什么?
时间:2020-12-23
-
OpenGL超级宝典visual studio 2013开发环境配置
时间:2021-01-04
-
编译器是如何实现32位整型的常量整数除
时间:2020-12-27
-
libusbwin32学习笔记(二)
时间:2020-12-27
-
C语言简单IT之家速成
时间:2020-12-27
-
C语言和Python语言有什么区别呢?
时间:2020-12-24
-
C++对象模型之RTTI的实现原理
时间:2020-12-23
